Linux内核驱动开发之KGDB单步调试内核(kgdboc方式) |
您所在的位置:网站首页 › linux 单步调试 › Linux内核驱动开发之KGDB单步调试内核(kgdboc方式) |
/**********************************************************************************************************************************/ 原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/9117597,作者:gqb666 /**********************************************************************************************************************************/关键步骤: 一、配置Linux内核,使其支持KGDB。 依次进行如下配置: $make menuconfig(下面配置为必须进行的) [plain] view plaincopy Kernel hacking---> -*- Magic SysRq key [*] Kernel debugging [*] Compile the kernel with debug info [*] KGDB: kernel debugging with remote gdb ---> KGDB: use kgdb over the serial console 配置成功后进行Linux内核的编译。make uImage并生成uImage拷贝到nfs/tftp服务器,等待u-boot下载内核或者直接烧到flash从flash上启动。 二、修改u-boot的启动参数bootargs以支持kgdb调试: setenv bootargs 'console=ttyS0,115200n8 kgdboc=ttyS0,115200 kgdbwait …… nfsroot=……' 主要增加以上红色字体部分,指定kgdb使用开发板上的哪个串口,注意这里是串口名而不是设备文件/dev/ttyS0。 三、配置虚拟机与PC机的串口映射。比如博主的Vmware虚拟机使用usb转串口到linux下串口设备名为/dev/ttyS1(将在第五步使用)。可以通过mincom进行实际测试。 四、在虚拟机linux系统下使用minicom启动开发板的内核:方法如下: tftp进行下载内核 [plain] view plaincopy OMAP3_EVM # tftp smc911x: detected LAN9220 controller smc911x: phy initialized #by guoqingbo smc911x: MAC 02:01:05:96:02:01 Using smsc911x-0 device TFTP from server 192.168.1.93; our IP address is 192.168.1.94 Filename 'uImage'. Load address: 0x82000000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ########################## done Bytes transferred = 2459200 (258640 hex)
使用bootm启动linux后会在下面输出信息处停下(要注意的是完成此步骤后务必要手工关闭该minicom会话,因为gdb远程连接时也需要此串口)等待gdb的连接: [plain] view plaincopy Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654 console [ttyS0] enabled #by guoingbo serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654 serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654 kgdb: Registered I/O driver kgdboc. kgdb: Waiting for connection from remote gdb...
截图来说明一下:
五、使用gdb调试vmlinux文件。使用前述博文《在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)》移植的 arm-none-linux-gnueabi-gdb进行调试内核文件vmlinux。方法如下: 在linux内核源码根目录下创建一个.gdbinit文件,其内容为: [plain] view plaincopy set remotebaud 115200 target remote /dev/ttyS1 然后同样在Linux内核源码目录下运行如下命令:
arm-none-linux-gnueabi-gdb ./vmlinux 不出意外的会有如下信息输出则说明已经连接成功,可以像gdb调试应用程序一样调试linux内核了。 [plain] view plaincopy Reading symbols from /home/ss/develop_environment/v2/sys/dvsdk/ti-dvsdk_dm3730-evm_4_02_00_06/psp/linux-2.6.32-psp03.00.01.06.sdk/vmlinux...done. During symbol reading, DW_AT_name missing from DW_TAG_base_type. During symbol reading, unsupported tag: 'DW_TAG_const_type'. During symbol reading, Child DIE 0x408b33 and its abstract origin 0x4085ee have different parents. During symbol reading, DW_AT_type missing from DW_TAG_subrange_type. kgdb_breakpoint () at kernel/kgdb.c:1744 1744 arch_kgdb_breakpoint(); (gdb)
截图:
六、若用DDD图形界面调试:前四个步骤相同,只需第五步中的命令换成 ddd --debugger arm-none-linux-gnueabi-gdb ./vmlinux 命令即可。
DDD调试内核的界面 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |